package com.lsc.record.core.service;

import java.util.List;

import com.lsc.record.common.BooleanResult;
import com.lsc.record.core.entity.DmType;
import com.lsc.record.core.entity.DmTypeAttr;
import com.lsc.record.core.entity.TableEntity;
import com.mybatisflex.core.service.IService;

public interface TypeService extends IService<DmType> {
	
	/**
	 * 获取完整的类型包括字段
	 * @param id
	 * @return
	 */
	public DmType getWithRelationById(String id);
	
	/**
	 * 追加类型属性
	 * @param attr
	 * @param typeId
	 * @return
	 */
	public BooleanResult appendAttr(DmTypeAttr attr,String typeId) throws Exception; 
	
	
	/**
	 * 删除类型属性
	 * @param attrId
	 * @return
	 */
	public BooleanResult removeAttr(String attrId);
	
	/**
	 * 更新类型属性
	 * @param attr
	 * @return
	 */
	public BooleanResult updateAttr(DmTypeAttr attr);
	
	/**
	 * 初始化类型的字段，用于类型初始创建使用
	 * @param typeId
	 * @return
	 */
	public BooleanResult initAttr(String typeId);
	
	/**
	 * 字段是否已存在
	 * @param name
	 * @param typeId
	 * @return
	 */
	public boolean existAttr(String name,String typeId);
	
	/**
	 * 获取类型的查询字段列表字符串，逗号分割
	 * @param typeId
	 * @return
	 */
	public String getTypeQueryColumn(String typeId);

	/**
	 * 根据表结构信息初始化基础的类型数据
	 * @param tableList
	 */
	public void initType(List<TableEntity> tableList);

	public List<DmType> list(boolean hasRelation);

	/**
	 * 根据类型名称获取类型
	 * @param typeName
	 * @return
	 */
	DmType getByTypeName(String typeName);

	public DmType createSubType(String superTypeId, String typeName,String snCode);
}
